package integracion;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.jms.*;
import javax.naming.*;

import xmlEntities.ItemXML;
import xmlEntities.SolicitudCompraXML;

import com.sun.xml.ws.encoding.xml.XMLMessage;
import com.thoughtworks.xstream.XStream;

import ejbs.AdmCotizaciones;
import ejbs.AdmCotizacionesBean;
import ejbs.AdmUrls;
import ejbs.Facade;
import ejbs.FacadeBean;
import entities.Cotizacion;
import entities.ItemAComprar;
import entities.SolicitudCompra;
import entities.SolicitudCotizacion;

@Stateless
public class SolicitarCompraQueueProducerBean implements SolicitarCompraQueueProducer
{
	@EJB
	private AdmCotizaciones admCotizaciones;
	
	@EJB
	private AdmUrls admUrls;
	
	
	public void enviarSolicutudCotizacion(SolicitudCompra solicitudCompra) 
	{
		
		System.out.println("1");
		
		Hashtable props = new Hashtable();		
		props.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
		
		//String urlOficinaDeVenta = "jnp://127.0.0.1:1099";	
		
		System.out.println(admUrls == null);
		
		//DESCOMENTAR CUANDO SE PRUEBE
		String urlOficinaDeVenta = admUrls.getJMSUrl();
		
		System.out.println(urlOficinaDeVenta);
		
		System.out.println("2");
		
		try
		{
		
		props.put(InitialContext.PROVIDER_URL, urlOficinaDeVenta);		
		Context ctx = new InitialContext(props);		
		QueueConnectionFactory qfactory = (QueueConnectionFactory)ctx.lookup("ConnectionFactory");		
		Queue queue = (Queue)ctx.lookup("queue/recibirSolCompraQueue");		
		
		System.out.println("3");
		
		QueueConnection qCon = qfactory.createQueueConnection();
		QueueSession qSession = qCon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);		
		QueueSender qSender = qSession.createSender(queue);
		
		System.out.println("4");
		
		XStream xstream = new XStream();
		xstream.alias("SolicitudCompra", SolicitudCompraXML.class);
		xstream.alias("Item", ItemXML.class);
		
		SolicitudCompraXML solicitudCompraXML= convertirSolicitudCompraAXmlEntity(solicitudCompra);		
		
		System.out.println("5");
		
		String xmlAEnviar = xstream.toXML(solicitudCompraXML);		
		
		System.out.println("=======imprimiendo XML Solicitud Compra==========");
		System.out.println(xmlAEnviar);		
		TextMessage message = qSession.createTextMessage(xmlAEnviar);		
		qSender.send(message);	
		
		} catch (JMSException e) {
			System.out.println("error en el queue de la solicutd de compra JMS Exception");
			e.printStackTrace();
		} catch (NamingException e) {
			System.out.println("error en el queue de la solicutd de compra JMS Naming Exception");
			e.printStackTrace();
		}
	}
	
	private SolicitudCompraXML convertirSolicitudCompraAXmlEntity(SolicitudCompra solicitudCompra)
	{
		SolicitudCompraXML solicitudCompraXML = new SolicitudCompraXML();
		
		solicitudCompraXML.setNumero(5);
		solicitudCompraXML.setTaller(12);		
		
		
		Date fecha = new Date();
		String fechaAAgregar = ConvertirFecha(fecha);
		
		solicitudCompraXML.setFecha(fechaAAgregar);
		
		for(ItemAComprar itemAcomprar : solicitudCompra.getItemsAComprar())
		{
			ItemXML itemXml = new ItemXML();			
			itemXml.setCodigo(itemAcomprar.getCodigo());
			itemXml.setCantidad(itemAcomprar.getCantidad());	
			
			Cotizacion cotizacion = new Cotizacion();
			admCotizaciones = new AdmCotizacionesBean();
			
			//cotizacion = admCotizaciones.obtenerUltimaCotizacion(itemAcomprar.getCodigo());
			
			if(cotizacion != null)
			{
				itemXml.setNumeroUltCotizacion(cotizacion.getId());				
			}
			
			solicitudCompraXML.getItems().add(itemXml);	
		}		
		return solicitudCompraXML;
	}

	private String ConvertirFecha(Date fecha)
	{
		SimpleDateFormat formatoFecha  = new SimpleDateFormat("yyyyMMdd");	
		return formatoFecha.format(fecha);		
	}
}
